// src/router/permission.js
import { useAuthStore } from '@/stores/auth'
import { useTagsViewStore } from '@/stores/tagsView'
import { ElMessage } from 'element-plus'

// 白名单路由
const whiteList = ['/auth/login', '/test', '/404', '/403', '/500']

export const setupPermission = (router) => {
  console.log('🔐 设置路由权限守卫')

  router.beforeEach(async (to, from, next) => {
    console.log(`🚀 路由跳转: ${from.path} → ${to.path}`)
    
    // 设置页面标题
    if (to.meta?.title) {
      document.title = `${to.meta.title} - 管理系统`
    }

    const authStore = useAuthStore()
    const tagsViewStore = useTagsViewStore()

    // 白名单直接放行
    if (whiteList.includes(to.path)) {
      console.log('✅ 白名单路由，直接放行')
      next()
      return
    }

    // 检查是否需要认证
    if (to.matched.some(record => record.meta?.requiresAuth !== false)) {
      // 检查登录状态
      if (!authStore.hasToken) {
        console.log('❌ 未登录，跳转到登录页')
        ElMessage.warning('请先登录')
        next({
          path: '/auth/login',
          query: { redirect: to.fullPath }
        })
        return
      }

      // 获取用户信息
      if (!authStore.userInfo?.id) {
        console.log('🔄 获取用户信息')
        try {
          await authStore.getUserInfo()
        } catch (error) {
          console.error('获取用户信息失败:', error)
          ElMessage.error('获取用户信息失败，请重新登录')
          authStore.logout()
          next('/auth/login')
          return
        }
      }

      // **新增：检查用户权限是否为空**
      if (!authStore.userInfo?.permissions || authStore.userInfo.permissions.length === 0) {
        console.log('⚠️ 用户权限为空，可能需要重新登录或联系管理员')
        ElMessage.warning('您暂无任何权限，请联系管理员或重新登录')
        authStore.logout()
        next('/auth/login')
        return
      }

      // 权限检查
      if (to.meta?.permission) {
        if (!authStore.hasPermission(to.meta.permission)) {
          console.log(`❌ 无权限访问: ${to.path}，需要权限: ${to.meta.permission}`)
          ElMessage.error('您没有权限访问此页面')
          next('/403')
          return
        }
      }

      // 添加到标签页
      if (to.meta?.title && to.path !== '/') {
        tagsViewStore.addView({
          name: to.name,
          path: to.path,
          title: to.meta.title,
          query: to.query,
          params: to.params
        })
      }

      console.log('✅ 权限检查通过')
    }

    next()
  })

  router.afterEach((to, from) => {
    console.log(`✅ 路由跳转完成: ${to.path}`)
  })

  router.onError((error) => {
    console.error('🚨 路由错误:', error)
    ElMessage.error('页面加载失败')
  })
}